﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.UI.Bovespa.Clientes.Communication.Bovespa.Cliente.TipoConta;
using Sinacor.Infra.UI.Common;

namespace Sinacor.UI.Bovespa.Clientes.Communication.Translator.ModelToDataContract
{
    /// <summary>
    /// Translator de Tipo Conta
    /// </summary>
    public class TipoConta
    {
        #region Métodos
        /// <summary>
        /// Traduz de Model.Parameter.FiltroCodigoCliente para FiltroCodigoClienteRequest
        /// </summary>
        /// <param name="from">Model.Parameter.FiltroCodigoCliente</param>
        /// <returns>FiltroCodigoClienteRequest</returns>
        public FiltroCodigoClienteRequest ToFiltroCodigoCliente(Model.Parameter.FiltroCodigoCliente from)
        {
            FiltroCodigoClienteRequest to = new FiltroCodigoClienteRequest();
            to.Codigo = from.Codigo;
            return to;
        }
        /// <summary>
        /// Traduz de Lista de Model.Parameter.FiltroCodigoCliente para Lista FiltroCodigoClienteRequest
        /// </summary>
        /// <param name="from">Lista de Model.Parameter.FiltroCodigoCliente</param>
        /// <returns>Lista FiltroCodigoClienteRequest</returns>
        public List<FiltroCodigoClienteRequest> ToFiltroCodigoCliente(ModelCollection<Model.Parameter.FiltroCodigoCliente> from)
        {
            List<FiltroCodigoClienteRequest> to = new List<FiltroCodigoClienteRequest>();
            foreach (Model.Parameter.FiltroCodigoCliente filtroCodigoClienteRequest in from)
                to.Add(ToFiltroCodigoCliente(filtroCodigoClienteRequest));

            return to;
        }

        /// <summary>
        /// Traduz de Model.Parameter.FiltroTipoConta para FiltroTipoContaRequest
        /// </summary>
        /// <param name="from">Model.Parameter.FiltroTipoConta</param>
        /// <returns>FiltroTipoContaRequest</returns>
        public FiltroTipoContaRequest ToFiltroTipoConta(Model.Parameter.FiltroTipoConta from)
        {
            FiltroTipoContaRequest to = new FiltroTipoContaRequest();
            to.ApelidoCliente = from.ApelidoCliente;
            to.CodigoCliente = from.CodigoCliente;
            to.Especialista = from.Especialista;
            if (from.TipoCliente != null)
            {
                switch (from.TipoCliente.Value)
                {
                    case Model.Enum.TipoCliente.AdministradoConcorrente:
                        to.TipoCliente = TipoCliente.AdministradoConcorrente;
                        break;
                    case Model.Enum.TipoCliente.CarteiraPropria:
                        to.TipoCliente = TipoCliente.CarteiraPropria;
                        break;
                    case Model.Enum.TipoCliente.ContaErro:
                        to.TipoCliente = TipoCliente.ContaErro;
                        break;
                    default:
                        break;
                }
            }

            return to;
        }

        /// <summary>
        /// Traduz de Model.Parameter.TipoConta para TipoContaRequest
        /// </summary>
        /// <param name="from">Model.Parameter.TipoConta</param>
        /// <returns>TipoContaRequest</returns>
        public TipoContaRequest ToTipoConta(Model.TipoConta from)
        {
            TipoContaRequest to = new TipoContaRequest();
            to.ApelidoCliente = from.ApelidoCliente;
            to.CodigoCliente = from.CodigoCliente;
            to.Especialista = from.Especialista;
            if (from.TipoCliente != null)
            {
                switch (from.TipoCliente.Value)
                {
                    case Model.Enum.TipoCliente.AdministradoConcorrente:
                        to.TipoCliente = TipoCliente.AdministradoConcorrente;
                        break;
                    case Model.Enum.TipoCliente.CarteiraPropria:
                        to.TipoCliente = TipoCliente.CarteiraPropria;
                        break;
                    case Model.Enum.TipoCliente.ContaErro:
                        to.TipoCliente = TipoCliente.ContaErro;
                        break;
                    default:
                        break;
                }
            }

            return to;
        }

        /// <summary>
        /// Traduz de Lista de Model.Parameter.TipoConta para Lista de TipoContaRequest
        /// </summary>
        /// <param name="from">Lista de Model.Parameter.TipoConta</param>
        /// <returns>Lista de TipoContaRequest</returns>
        public List<TipoContaRequest> ToTipoConta(ModelCollection<Model.TipoConta> from)
        {
            List<TipoContaRequest> to = new List<TipoContaRequest>();
            foreach (Model.TipoConta tipoContaRequest in from)
                to.Add(ToTipoConta(tipoContaRequest));

            return to;
        }
        #endregion
    }
}
